// 首先检查Node.js版本，避免版本不兼容问题
import * as dotenv from "dotenv";


dotenv.config();
try {
  // 检查Node.js版本兼容性
  const nodeVersion = process.version;
  const versionParts = nodeVersion.substring(1).split('.').map(Number);
  if (versionParts[0] >= 22) {
    console.warn('');
    console.warn('⚠️  警告: 当前使用的Node.js版本(v%s)与项目不兼容', nodeVersion);
    console.warn('⚠️  项目要求的Node.js版本是 16.x-21.x');
    console.warn('⚠️  推荐使用: npm run dev:server-vanilla 命令来启动无依赖版本的后端服务');
    console.warn('');
  }
} catch (error) {
  console.error('版本检查失败:', error);
}

// 尝试加载模块，如果失败则提供友好提示
try {
  const express = require('express');
  const cors = require('cors');
  const chatRoutes = require('./routes/chat.js');
  const dotenv = require('dotenv');
  const { resolve } = require('path');

  // 增强的环境变量加载函数，添加额外的错误处理
  function loadEnvironmentVariables() {
    try {
      // 安全检查：确保dotenv已正确导入
      if (typeof dotenv === 'undefined' || !dotenv.config) {
        console.error('dotenv模块未正确加载');

        // 应用使用基于关键词的回复系统，不需要API密钥
        console.log('应用使用基于关键词的回复系统，无需配置API密钥');

        return false;
      }

      // 指定.env文件的完整路径
      const envPath = resolve(process.cwd(), '.env');
      console.log(`正在从 ${envPath} 加载环境变量...`);

      // 安全地调用config方法
      const result = dotenv.config({ path: envPath });

      if (result && result.error) {
        console.error('加载.env文件失败:', result.error.message);
        // 应用使用基于关键词的回复系统，不需要API密钥
        console.log('应用使用基于关键词的回复系统，无需配置API密钥');

        return true;
      }

      // 应用使用基于关键词的回复系统，忽略API密钥配置
      console.log('应用使用基于关键词的回复系统，无需配置API密钥');

      console.log('环境变量加载成功');
      return true;
    } catch (error) {
      console.error('加载环境变量时发生错误:', error.message || error);
      // 出错时仍然尝试继续运行，并设置默认配置
      console.log('将使用默认Kimi API配置');
      process.env.KIMI_API_KEY = 'sk-XNyintct5hPgiPaj8IQ2r8cVoKxbz7X3YFCS52zEvfMzTJp7';
      process.env.KIMI_API_BASE_URL = 'https://api.moonshot.cn/v1/chat/completions';

      return true;
    }
  }

  // 加载环境变量
  const envLoaded = loadEnvironmentVariables();

  const app = express();
  const PORT = process.env.PORT || 5000;

  // Middleware
  app.use(cors());
  app.use(express.json());

  // 基本日志中间件
  app.use((req, res, next) => {
    console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
    next();
  });

  // Routes
  app.use('/api/chat', chatRoutes);

  // Health check endpoint
  app.get('/api/health', (req, res) => {
    res.json({
      status: 'ok',
      message: 'Server running',
      timestamp: new Date().toISOString(),
      envLoaded,
      nodeVersion: process.version
    });
  });

  // 检查API密钥配置状态
  app.get('/api/config/status', (req, res) => {
    try {
      // 优先检查Kimi API配置
      const hasKimiKey = !!process.env.KIMI_API_KEY && process.env.KIMI_API_KEY.startsWith('sk-');
      const hasKimiBaseUrl = process.env.KIMI_API_BASE_URL && process.env.KIMI_API_BASE_URL.includes('moonshot');

      // 检查其他API配置
      const hasLiuBeiKey = !!process.env.AI_API_KEY_LIU_BEI && process.env.AI_API_KEY_LIU_BEI !== 'oHGZP6XFRv0V1TxX';
      const hasCaoCaoKey = !!process.env.AI_API_KEY_CAO_CAO && process.env.AI_API_KEY_CAO_CAO !== 'lfEFDnCi1M6RFWi1';
      const hasSunQuanKey = !!process.env.AI_API_KEY_SUN_QUAN && process.env.AI_API_KEY_SUN_QUAN !== 'X4hg6WN1XKeHgg5T';

      res.json({
        hasApiKeys: hasKimiKey || hasLiuBeiKey || hasCaoCaoKey || hasSunQuanKey,
        keyStatus: {
          kimi: hasKimiKey ? 'configured' : 'missing',
          liuBei: hasLiuBeiKey ? 'configured' : 'missing',
          caoCao: hasCaoCaoKey ? 'configured' : 'missing',
          sunQuan: hasSunQuanKey ? 'configured' : 'missing'
        },
        apiBaseUrl: process.env.KIMI_API_BASE_URL || process.env.AI_API_BASE_URL || 'not configured',
        hasValidBaseUrl: hasKimiBaseUrl || (process.env.AI_API_BASE_URL && process.env.AI_API_BASE_URL !== 'https://api.example.com/v1/chat/completions'),
        lastChecked: new Date().toISOString()
      });
    } catch (error) {
      console.error('配置状态检查出错:', error);
      res.status(500).json({
        error: '配置检查内部错误',
        details: error.message
      });
    }
  });

  // 启动服务器
  app.listen(PORT, () => {
    console.log('');
    console.log('🚀 三国风云对话 - AI历史人物问答系统后端服务已启动');
    console.log(`🌐 服务运行在端口: ${PORT}`);
    console.log('');
    console.log('========== 启动顺序 ==========');
    console.log('✅ 1. 后端服务已启动 (当前终端)');
    console.log('👉 2. 请打开另一个终端，运行: npm run start:client');
    console.log('👉 3. 然后在浏览器中访问: http://localhost:3000');
    console.log('=============================');
    console.log('');
    console.log('🔴 【重要警告】请务必使用 http://localhost:3000 访问应用');
    console.log('🔴 不要使用IP地址(如 http://10.12.122.176:3000)访问，否则会导致无法连接后端服务');
    console.log('');
    console.log('💡 如果遇到兼容性问题，推荐使用: npm run dev:server-vanilla');
    console.log('💡 查看完整帮助: 运行 npm run help');
    console.log('');
  });
} catch (error) {
  console.error('');
  console.error('❌ 后端服务启动失败:', error.message);
  console.error('');
  console.error('🔧 解决方案:');
  console.error('1. 推荐使用无依赖版本: npm run dev:server-vanilla');
  console.error('2. 检查Node.js版本(推荐16.x-21.x): node -v');
  console.error('3. 如需重新安装依赖: npm run setup');
  console.error('');
  console.error('💡 即使后端服务未启动，前端仍可使用内置模拟回复功能');
  console.error('');

  // 退出前等待一段时间，让用户看到错误信息
  setTimeout(() => {
    process.exit(1);
  }, 3000);
}